home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / pl0 / pl0gener.mod < prev    next >
Encoding:
Modula Implementation  |  1994-09-22  |  1.3 KB  |  75 lines

  1.  
  2. IMPLEMENTATION MODULE PL0Generator;
  3.  
  4. FROM TextWindows IMPORT Window, OpenTextWindow, WriteString, Write,
  5.                         WriteLn, WriteCard, CloseTextWindow;
  6.                         
  7. FROM Windows IMPORT WindowElements, Title;
  8.  
  9. FROM PL0Interpreter IMPORT Instruction, maxfct, maxadr, code;
  10.  
  11. VAR
  12.   L : CARDINAL;
  13.   win : Window;
  14.   mnemonic : ARRAY [0..maxfct],[0..3] OF CHAR;
  15.   
  16.  
  17. PROCEDURE InitGenerator;
  18. BEGIN
  19.   L := 0;
  20.   Write(win,14C);
  21. END InitGenerator;
  22.  
  23.  
  24. PROCEDURE Label() : CARDINAL;
  25. BEGIN
  26.   RETURN L;
  27. END Label;
  28.  
  29.  
  30. PROCEDURE Gen(x,y,z : CARDINAL);
  31. BEGIN
  32.   IF L>=maxadr THEN HALT; END;
  33.   WITH code[L] DO 
  34.     f := x;
  35.     l := y;
  36.     a := z;
  37.   END;
  38.   WriteCard(win,L,4);
  39.   WriteString(win,mnemonic[x]);
  40.   WriteCard(win,y,3);
  41.   WriteCard(win,z,6);
  42.   WriteLn(win);
  43.   INC(L);
  44. END Gen;
  45.  
  46.  
  47. PROCEDURE fixup(x : CARDINAL);
  48. BEGIN
  49.   code[x].a := L;
  50.   WriteString(win,"fixup at");
  51.   WriteCard(win,x,4);
  52.   WriteLn(win);
  53. END fixup;
  54.  
  55.  
  56. PROCEDURE EndGenerator;
  57. BEGIN
  58.   CloseTextWindow(win);
  59. END EndGenerator;
  60.  
  61.  
  62. BEGIN
  63.   OpenTextWindow(win,WindowElements{Title},215,161,210,155,"CODE");
  64.   mnemonic[0] := " LIT";
  65.   mnemonic[1] := " OPR";
  66.   mnemonic[2] := " LOD";
  67.   mnemonic[3] := " STO";
  68.   mnemonic[4] := " CAL";
  69.   mnemonic[5] := " INT";
  70.   mnemonic[6] := " JMP";
  71.   mnemonic[7] := " JPC";
  72. END PL0Generator.
  73.  
  74.  
  75.